package com.freecloud.plug.mybatis.type;

import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.freecloud.common.LoggerUtil;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * 注意：需要使用mysql-connector 5.1.40以上才可解决mysql json格式乱码问题
 * @Author: maomao
 * @Date: 2021-04-09 11:16
 */
public class JsonTypeHandler extends BaseTypeHandler<JSON> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, JSON parameter, JdbcType jdbcType) throws SQLException {
        LoggerUtil.printThread("java -> jdbc类型");
        ps.setString(i,parameter.toString());
    }

    @Override
    public JSON getNullableResult(ResultSet rs, String columnName) throws SQLException {
        LoggerUtil.printThread("jdbc -> java类型 根据列名获取");
        return JSONUtil.parse(rs.getString(columnName));
    }

    @Override
    public JSON getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        LoggerUtil.printThread("jdbc -> java类型 根据序号获取");
        return JSONUtil.parse(rs.getString(columnIndex));
    }

    @Override
    public JSON getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        LoggerUtil.printThread("jdbc -> java类型 存储过程使用");
        return JSONUtil.parse(cs.getString(columnIndex));
    }
}
